﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

using SOAPServices.Persistencia;
using SOAPServices.Dominio;
namespace SOAPServices
{
    public class Citas : ICitas
    {

        private PacienteDAO pacienteDAO = null;
        private PacienteDAO PacienteDAO
        {
            get
            {
                if (pacienteDAO == null)
                    pacienteDAO = new PacienteDAO();
                return pacienteDAO;
            }
        }

        private ProductoDAO productoDAO = null;
        private ProductoDAO ProductoDAO
        {
            get
            {
                if (productoDAO == null)
                    productoDAO = new ProductoDAO();
                return productoDAO;
            }
        }

        private VeterinarioDAO veterinarioDAO = null;
        private VeterinarioDAO VeterinarioDAO
        {
            get
            {
                if (veterinarioDAO == null)
                    veterinarioDAO = new VeterinarioDAO();
                return veterinarioDAO;
            }
        }

        private EstadoCitaDAO estadocitaDAO = null;
        private EstadoCitaDAO EstadoCitaDAO
        {
            get
            {
                if (estadocitaDAO == null)
                    estadocitaDAO = new EstadoCitaDAO();
                return estadocitaDAO;
            }
        }

        private CitaDAO citaDAO = null;
        private CitaDAO CitaDAO
        {
            get
            {
                if (citaDAO == null)
                    citaDAO = new CitaDAO();
                return citaDAO;
            }
        }
        
        public Cita CrearCita(int idVeterinario, int idPaciente, int IdEstado, DateTime FechaRegistro, DateTime FechaCita, int idProducto, string Diagnositco)
        {
            try
            {
                Veterinario vet = VeterinarioDAO.Obtener(idVeterinario);
                Paciente p = PacienteDAO.Obtener(idPaciente);
                Producto prod = ProductoDAO.Obtener(idProducto);
                EstadoCita e = EstadoCitaDAO.Obtener(IdEstado);

                Cita v = new Cita()
                {
                    Veterinario = vet,
                    Paciente = p,
                    EstadoCita = e,
                    FechaRegistro = FechaRegistro,
                    FechaCita = FechaCita,
                    Producto = prod,
                    Diagnositco = Diagnositco
                };
                return CitaDAO.Crear(v);
            }
            catch (FaultException ex)
            {
                throw ex;
            }

        }

        public Cita ObtenerCita(int idCita)
        {
            return CitaDAO.Obtener(idCita);
        }

        public Cita ModificarCita(int idCita, int idVeterinario, int idPaciente, int IdEstado, DateTime FechaRegistro, DateTime FechaCita, int idProducto, string Diagnositco)
        {
            try
            {
                Veterinario vet = VeterinarioDAO.Obtener(idVeterinario);
                Paciente p = PacienteDAO.Obtener(idPaciente);
                Producto prod = ProductoDAO.Obtener(idProducto);
                EstadoCita e = EstadoCitaDAO.Obtener(IdEstado);
                Cita v = new Cita()
                {
                    IdCita = idCita,
                    Veterinario = vet,
                    Paciente = p,
                    EstadoCita = e,
                    FechaRegistro = FechaRegistro,
                    FechaCita = FechaCita,
                    Producto = prod,
                    Diagnositco = Diagnositco
                };
                return CitaDAO.Modificar(v);
               
            }
            catch (FaultException ex)
            {
                throw ex;
            }
            
        }

        public void EliminarCita(int idCita)
        {
            Cita v = CitaDAO.Obtener(idCita);
            CitaDAO.Eliminar(v);
        }

        public List<Cita> ListarCita()
        {
            return CitaDAO.ListarTodos().ToList();
        }

    }
}
